In the field of communications technologies, a service flow initiated by a user usually needs to be processed by using multiple types of service functions (SF), and different types of service flows may require different service functions.
In the prior art, different types of service flows are classified into different service chains. SF sequences that each service chain needs to pass through and an order of passing through the SF sequences are defined. Service flows of different service chains need to pass through only corresponding service nodes. During specific implementation, a classifier classifies the service flows initiated by the user, and adds a service chain identifier to a packet of the service flow. Then the classifier sends the packet to a forwarder, and the forwarder determines, according to the service chain identifier included in the packet and a route mapping relationship of the service flow of the service chain, a next service node for receiving the packet.
Actually, a same type of SFs may include multiple service nodes. When the forwarder forwards a packet, load balancing between multiple service nodes of a same type needs to be considered. In addition, dynamic load of the multiple service nodes varies with time. However, the prior art does not provide an efficient and flexible method for implementing service node load balancing.